using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;
using Common;
using DataAccess;
using SystemFrameworks;

namespace BusinessRules
{
	/// <summary>
	/// Clase de acceso a datos para la entidad Demoras
	/// </summary>
	public class Respuesta : SINIC
	{

        private string _CadenaConexion;

        public string CadenaConexion
        {
            get { return _CadenaConexion; }
            set { _CadenaConexion = value; }
        }

		#region Private Data Access Atributes

		private const String RES_RES_ID_PARAM = "@RES_RES_ID";
		private const String ENC_ID_PARAM = "@ENC_ID";
		private const String PRE_ID_PARAM = "@PRE_ID";
		private const String RES_RESPUESTA_PARAM = "@RES_RESPUESTA";
		private const String VAL_TIP_ID_PARAM = "@VAL_TIP_ID";
		private const String RES_ID_PARAM = "@RES_ID";
		private const String RES_ENCUESTADOS_PARAM = "@RES_ENCUESTADOS";
		private const String RES_IP_PARAM = "@RES_IP";
		

		#endregion Private Data Access Atributes

		/// <summary>
		/// Constructor de la clase Mod_respuestas
		/// </summary>
        public Respuesta(string strCadenaConecxion)
		{
            CadenaConexion = strCadenaConecxion;
		}

		public RespuestaData BuscarEncuestasRespuestas()
		{
			RespuestaData response = new RespuestaData();
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_BUSCAR_MOD_RESPUESTAS", response );
			if (response .Rows.Count == 0)
				return null;
			return response;
		}

		public RespuestaData ConsultarEncuestasRespuestas(string Id)
		{
			RespuestaData response = new RespuestaData();
			SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, Id);
			SqlParameter[] parameters = {param1};
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_RESPUESTAS", response , parameters);
			if (response .Rows.Count == 0)
				return null;
			return response;
		}

		public RespuestaData ConsultarEncuestasRespuestasValores(string Idval)
		{
			RespuestaData response = new RespuestaData();
			SqlParameter param1 = new SqlParameter(VAL_TIP_ID_PARAM, Idval);
			SqlParameter[] parameters = {param1};
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_RESPUESTAS_VALORES", response, parameters);
			if (response .Rows.Count == 0)
				return null;
			return response;
		}

		/// <summary>
		/// Consulta si la respuesta tiene votos asociados
		/// </summary>
		/// <param name="IdEncuesta">Encuesta</param>
		/// <param name="IdPregunta">Pregunta</param>
		/// <returns></returns>
		public RespuestaData ConsultarEncuestasRespuestasValores(string IdEncuesta, string IdPregunta)
		{
			RespuestaData response = new RespuestaData();
			SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, IdEncuesta);
			SqlParameter param2 = new SqlParameter(PRE_ID_PARAM, IdPregunta);

			SqlParameter[] parameters = {param1, param2};
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_RESPUESTAS_TOT", response , parameters);
			if (response .Rows.Count == 0)
			{
				return null;
			}
			return response;
		}

		/// <summary>
		/// Consulta si la respuesta esta en la tabla MOD_RESPUESTAS
		/// </summary>
		/// <param name="IdEncuesta">encuesta</param>
		/// <param name="IdPregunta">pregunta</param>
		/// <param name="IdVal">valor de respuesta</param>
		/// <returns></returns>
		public RespuestaData ConsultarEncuestasRespuestasValores(string IdEncuesta, string IdPregunta, string IdVal)
		{
			RespuestaData response = new RespuestaData();
			SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, IdEncuesta);
			SqlParameter param2 = new SqlParameter(PRE_ID_PARAM, IdPregunta);
			SqlParameter param3 = new SqlParameter(VAL_TIP_ID_PARAM, IdVal);
			SqlParameter[] parameters = {param1, param2, param3};
			SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_RESPUESTAS_VALORES_ENC", response , parameters);
			if (response .Rows.Count == 0)
			{
				return null;
			}
			return response;
		}

		public void AdicionarEncuestasRespuestas(RespuestaData datos)
		{
			DataTable tabla = datos; 
			StartTransaction();
			try
			{

				int encuestados = ConsultarEncuestasEncuestados(tabla.Rows[0][RespuestaData.ENC_ID_FIELD].ToString()  );
				foreach (DataRow row in tabla.Rows)
				{
					SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, row[RespuestaData.ENC_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(PRE_ID_PARAM, row[RespuestaData.PRE_ID_FIELD]);
					SqlParameter param3 = new SqlParameter(VAL_TIP_ID_PARAM, row[RespuestaData.VAL_TIP_ID_FIELD]);
					SqlParameter param4 = new SqlParameter(RES_RESPUESTA_PARAM, row[RespuestaData.RES_RESPUESTA_FIELD]);
					SqlParameter param5 = new SqlParameter(RES_ID_PARAM, row[RespuestaData.RES_ID_FIELD]);
					SqlParameter param6 = new SqlParameter(RES_ENCUESTADOS_PARAM, encuestados );
					SqlParameter param7 = new SqlParameter(RES_IP_PARAM, row[RespuestaData.RES_IP_FIELD]  );

					SqlParameter[] parameters = {param1, param2, param3, param4, param5, param6, param7};
					SqlHelper.ExecuteNonQuery( CadenaConexion, CommandType.StoredProcedure, "PAS_ADICIONAR_MOD_RESPUESTAS", parameters);
				}
				CompleteTransaction();
			}
			catch (SqlException sqlEx)
			{
				AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "RespuestasEncuestas"), sqlEx);
			}
			catch (Exception ex)
			{
				AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "RespuestasEncuestas"), ex);
			}
			
			
		}

		public int ConsultarEncuestasEncuestados(string Id)
		{
			int resultado = 0;
			RespuestaData response = new RespuestaData();
			SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, Id);
			SqlParameter param2 = new SqlParameter(RES_ENCUESTADOS_PARAM, SqlDbType.Decimal);
			param2.Direction = ParameterDirection.Output;
			SqlParameter[] parameters = {param1, param2};
			try
			{
				SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_ENCUESTADOS_MOD_RESPUESTAS", parameters);
				resultado = Convert.ToInt32(param2.Value);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_CONSULTAR_MOD_RESPUESTAS"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", GetType().FullName), ex);
			}
			return resultado;

		}

//		public void ActualizarEncuestasRespuestas(RespuestaData datos)
//		{
//			DataTable tabla = datos; //.Tables[RespuestaData.MOD_RESPUESTAS_TABLE];
//			try
//			{
//				foreach (DataRow row in tabla.Rows)
//				{
//					SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, row[RespuestaData.ENC_ID_FIELD]);
//					SqlParameter param2 = new SqlParameter(PRE_ID_PARAM, row[RespuestaData.PRE_ID_FIELD]);
//					SqlParameter param3 = new SqlParameter(TOT_PRE_PARAM, row[RespuestaData.TOT_PRE_FIELD]);
//					SqlParameter param4 = new SqlParameter(VAL_TIP_ID_PARAM, row[RespuestaData.VAL_TIP_ID_FIELD]);
//					SqlParameter[] parameters = {param1, param2, param3, param4};
//					SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_ACTUALIZAR_MOD_RESPUESTAS", parameters);
//				}
//			}
//			catch (Exception ex)
//			{
//				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", "RespuestasEncuestas"), ex);
//			}
//		}

		/// <summary>
		/// Elimina un registro de la entidad
		/// </summary>
		/// <param name="Id">Identificador del registro</param>
		public void EliminarEncuestasRespuestas(string Id)
		{
			try
			{
				SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, Id);
				SqlParameter[] parameters = {param1};
				SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_ELIMINAR_MOD_RESPUESTAS", parameters);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "RespuestasEncuestas"), ex);
			}
		}

		public void EliminarEncuestasRespuestas(ArrayList arrIDs)
		{
			SqlConnection objConnection = new SqlConnection(ConnectionString);
			objConnection.Open();
			SqlTransaction objTrans = objConnection.BeginTransaction();

			try
			{
				foreach (object Item in arrIDs)
				{
					SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, decimal.Parse(Item.ToString()));
					SqlParameter[] parameters = {param1};
					SqlHelper.ExecuteNonQuery(objTrans, CommandType.StoredProcedure, "PAS_ELIMINAR_MOD_RESPUESTAS", parameters);
				}
				objTrans.Commit();
			}
			catch (SqlException sqlEx)
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "RespuestasEncuestas"), sqlEx);
			}
			catch
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "RespuestasPreguntasEncuestas"));
			}
			finally
			{
				objConnection.Close();
			}
		}

		/// <summary>
		/// Elimina un registro de la entidad
		/// </summary>
		/// <param name="Enc_Id">Identificador de la encuesta</param>
		/// <param name="Pre_Id">Identificador de la pregunta</param>
		public void EliminarEncuestasRespuestas(string Enc_Id, string Pre_Id)
		{
			try
			{
				SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, Enc_Id);
				SqlParameter param2 = new SqlParameter(PRE_ID_PARAM, Pre_Id);
				SqlParameter[] parameters = {param1, param2};
				SqlHelper.ExecuteNonQuery(CadenaConexion, CommandType.StoredProcedure, "PAS_ELIMINAR_MOD_RESPUESTAS_ENCID", parameters);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_MOD_RESPUESTAS_ENCID"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "PAS_ELIMINAR_MOD_RESPUESTAS_ENCID"), ex);
			}
		}

	}
}